﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Atomic.Common;
using Atomic.Common.Validators;
using Atomic.Configuration.Entities;
using Atomic.Configuration.DAL;
using System.Linq.Expressions;

/****************************************************************
 * 作者：杜一博
 * 日期：2012/9/19
 * 描述：
 * 
 * --------------------------------------------------------------
 * 修改记录：
 * --------------------------------------------------------------
 * 修改人：
 * 修改日期：
 * 修改内容：
 * 
 ****************************************************************/

namespace Atomic.Configuration
{
    /// <summary>
    /// 描述内容
    /// </summary>
    public interface IConfig : IError
    {
        /// <summary>
        /// 新建配置，配置Key不能重复
        /// </summary>
        /// <param name="entity">配置信息</param>
        /// <returns>是否添加成功</returns>
        bool Add(ConfigEntity entity);

        /// <summary>
        /// 更新键信息
        /// </summary>
        /// <param name="entity">要更新的数据</param>
        /// <param name="key">配置唯一键名</param>
        /// <returns>是否更新成功</returns>
        bool Update(ConfigEntity entity, string key);

        /// <summary>
        /// 删除指定键
        /// </summary>
        /// <param name="key">键名</param>
        /// <returns>是否成功</returns>
        bool Remove(string key);

        /// <summary>
        /// 获取指定键信息
        /// </summary>
        /// <param name="key">键名</param>
        /// <returns>键值信息</returns>
        ConfigEntity Get(string key);

        /// <summary>
        /// 获取所有键值信息
        /// </summary>
        /// <param name="predicate">筛选条件</param>
        /// <returns>所有符合条件的键值</returns>
        List<ConfigEntity> GetList(Expression<Func<ConfigEntity, bool>> predicate = null);

        /// <summary>
        /// 分页查询键值信息
        /// </summary>
        /// <param name="pager">分页参数</param>
        /// <param name="predicate">筛选条件</param>
        /// <returns>所有符合条件的键值</returns>
        Pager<ConfigEntity> GetPager(Pager pager, Expression<Func<ConfigEntity, bool>> predicate = null);
    }
}
